package JVM.chapter04;

import asTest.Main;

/**
 * EarlyBinding(早期绑定):
 *  也叫静态链接：
 *   被调用的目标方法编译可知，且运行期间保持不变时
 *
 * LateBinding（晚期绑定）:
 *  也叫动态绑定：
 *  被调用的方法在编译期间无法确定，只能够程序在运行时，
 *  根据实际类型绑定的方法
 *
 * // todo 查看以下类的 的反编译
 */
public class EarlyBindingAndLateBinding {

    class Animal{
        void eat() {
            System.out.println("动物吃");  // todo 1. 这里叫早期绑定或静态绑定
        }
    }

    class Cat extends Animal{
        @Override
        void eat() {
            System.out.println("猫吃鱼"); // todo 2. 这里叫早期绑定或静态绑定
        }
    }

    class Dog extends Animal{
        @Override
        void eat() {
            System.out.println("狗吃肉"); //  todo 3. 这里叫早期绑定或静态绑定
        }
    }

    public void AnimalEatTest(Animal animal){
        animal.eat();  // todo               4. 这里叫：动态链接/晚期绑定
    }

    public static void main(String[] args) {

    }
}
